package com.sdy.usercenter.api;

import com.sdy.common.model.BizException;
import com.sdy.common.model.PageQuery;
import com.sdy.common.model.PageResult;
import com.sdy.usercenter.api.dto.DeptDto;
import com.sdy.usercenter.api.dto.ResourceDTO;
import com.sdy.usercenter.api.dto.RoleDto;
import com.sdy.usercenter.api.dto.UserDTO;
import org.springframework.cloud.openfeign.FeignClient;

import java.util.List;

/**
 * 用户中心API
 * @author zhouziqiang
 */
@FeignClient("user-center")
public interface UserQueryApi {
    /**
     * 查询单个用户信息
     * @param userId 用户id
     * @return 用户信息
     */
    UserDTO getUser(Integer userId);

    /**
     * 查询单个部门信息
     * @param deptId 部门id
     * @return 部门信息
     */
    DeptDto getDept(Integer deptId);
    
    /**
     * 查询用户列表
     * @param userIdList 用户id列表
     * @return 用户列表
     */
    List<UserDTO> listUser(List<Integer> userIdList);

    /**
     * 查询系统
     * @param appCode 系统代码
     * @return 应用信息
     */
    ResourceDTO getAppByCode(String appCode);

    /**
     * 查询所有系统
     * @return 应用列表
     */
    List<ResourceDTO> listApp();

    /**
     * 查询所有部门
     * @param parentId 父部门id
     * @return 子部门列表
     */
    List<DeptDto> listDept(Integer parentId);

    /**
     * 查询所有部门
     * @param keyword 关键字搜索
     */
    List<DeptDto> listDept(String keyword);

    /**
     * 查询部门
     */
    List<DeptDto> listDeptByIds(List<Integer> deptIdList);

    /**
     * 查询角色
     */
    List<RoleDto> listRoleByIds(List<Integer> roleIdList);

    /**
     * 查询所有角色
     */
    List<RoleDto> listRole();

    /**
     * 查询用户下的部门
     */
    List<DeptDto> listUserManageDept(Integer userId, Integer parentId);

    /**
     * 查询部门下的用户
     */
    PageResult<UserDTO> pageUserInDept(PageQuery pageQuery, Integer deptId, String username, Boolean recursively);

    /**
     * 根据code获取部门信息
     */
    DeptDto getDeptByCode(String deptCode);

    /**
     * 获取审核用的角色
     */
    @Deprecated
    RoleDto getRoleForApprove() throws BizException;

    /**
     * 查询部门下的用户
     */
//    List<UserDTO> listUserInDept(Integer deptId, String username);

    /**
     * 添加用户系统权限
     */
    void addUserApp(List<Integer> userIdList, String appCode) throws BizException;
    /**
     * 移除用户系统权限
     */
    void removeUserApp(List<Integer> userIdList, String appCode) throws BizException;

    /**
     * 根据登录名查询用户
     */
    UserDTO getUserByLoginName(String loginName);

    /**
     * 查询有某个权限的角色
     * @param authCode
     * @return
     */
    List<RoleDto> listRoleByAuth(String appCode, String authCode);

    /**
     * 根据code查询角色
     * @param code
     * @return
     */
    RoleDto getRoleByCode(String code);
}
